package com.liangwj.springbootrabbitmq.rabbit;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.SimpleConnection;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <b>Description:</b> RabbitMQ 的配置--创建queue队列 <br/>
 * @author Lingwenjun
 * @date 2019/1/4-15:31
 * @version 1.0
 * @see # http://localhost:15672/#/queues
 */
@Configuration
public class RabbitMQconfig {

    @Bean
    public Connection getConnection(Connection connection) {
         return new SimpleConnection((com.rabbitmq.client.Connection) connection, 1000);
    }

    @Bean
    public Channel getChannel(Connection connection) {
         return connection.createChannel(true);
    }
    /**
     * queue：queue的名称
     *
     * exclusive：排他队列，如果一个队列被声明为排他队列，该队列仅对首次申明它的连接可见，并在连接断开时自动删除。
     *            这里需要注意三点：
     *              1. 排他队列是基于连接可见的，同一连接的不同信道是可以同时访问同一连接创建的排他队列；
     *              2.“首次”，如果一个连接已经声明了一个排他队列，其他连接是不允许建立同名的排他队列的，这个与普通队列不同；
     *              3.即使该队列是持久化的，一旦连接关闭或者客户端退出，该排他队列都会被自动删除的，这种队列适用于一个客户端发送读取消息的应用场景。
     *
     * autoDelete：自动删除，如果该队列没有任何订阅的消费者的话，该队列会被自动删除。这种队列适用于临时队列。
     */

    @Bean
    public Queue Queue() {
        //return QueueBuilder.durable("hello").build();//持久化
        return QueueBuilder.nonDurable("hello").autoDelete().build();
    }

    @Bean
    public Queue oneTomanyQueue() {
        //return QueueBuilder.durable("oneToMany").build();
        return QueueBuilder.nonDurable("oneToMany").autoDelete().build();
    }

    @Bean
    public Queue manQueue() {

        //return QueueBuilder.durable("user").build();
        return QueueBuilder.nonDurable("user").autoDelete().build();
    }
    //TODO :如何将 不同名字的队列与 Exchange 绑定 Binding

}
